package com.vvss.beetlsql;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.beetl.sql.core.SQLReady;
import org.beetl.sql.core.annotatoin.SqlStatement;
import org.beetl.sql.core.annotatoin.Table;
import org.beetl.sql.experimental.iohao.core.$Mapper;
import org.beetl.sql.experimental.iohao.core.$Sql;
import org.beetl.sql.experimental.iohao.mapper.annotation.Ignore;

import java.util.List;

import static org.beetl.sql.experimental.iohao.core.SqlKit.mapper;
import static org.beetl.sql.experimental.iohao.core.SqlKit.$;

/**
 * <BR>
 * create time : 2017-04-18 13:01
 *
 * @author luoyizhu@gmail.com
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)  // 属性默认都是private
//@lombok.experimental.Accessors(chain = true) // 链式编程
@Table(name = "tb_bird")                     // 实体类与表映射
public class Bee implements $Sql { // 实现$Sql接口, 可以在对象上直接使用 save, update, delete 方法 (不是必须的)
    int id;
    /** 年龄 */
    Integer age;
    /** 名字 */
    String name;
    /** 描述 */
    String description;

    // 自定义sqlDao处理类. (如果没有自定义sql就没必要定义这个接口)
    public interface Dao extends $Mapper<Bee> {
        /** 约定使用$符号表示自己 (这句代码也不是必须的) */
        Dao $ = mapper(Dao.class);

        // 使用注解忽略默认的内置处理, 也可以写成下面的方式, 这里只是示例使用
        @Ignore
        default List<Integer> findIds() {
            return $().execute(new SQLReady("select id from tb_bird"), Integer.class);
        }

        // 这里无需再写接口实现类, 只需要在bee.md文件写sql
        @SqlStatement(params = "age,name,description")
        Bee findOne(int age, String name, String description);

        // 这里无需再写接口实现类, 只需要在bee.md文件写sql
        @SqlStatement(params = "age,name")
        List<Bee> finds(int age, String name);


    }
}







